<?php
namespace app\api\controller;
use think\Controller;
use think\Request;

/**
 * API控制器基类
 */
class Api extends Controller
{
    /**
     * 无需登录的方法
     * @var array
     */
    protected $noNeedLogin = ['gologin','follow','injm','customcd'];
    /**
     * 默认响应输出类型,支持json/xml
     * @var string
     */
    protected $responseType = 'json';
    /**
     * @var array
     * 用户信息
     */
    protected $userInfo = [];//用户信息
    /**
     * 初始化操作
     * @access protected
     */
    protected function _initialize()
    {
        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept,Token");
        header('Access-Control-Allow-Methods: GET,POST,PUT,OPTIONS');

        //判断token存在的时候返回true，否则未false
        $token = request()->header('token');
        if (!$this->match($this->noNeedLogin)) {
            if ($token) {
                $userInfo = db('users')->where(['token' => $token])->find();
                if ($userInfo) {
                    if($userInfo['status'] == '2'){
                        return_msg(1,'您的账号已被冻结,无法进行操作');
                    }
                    $this->userInfo = $userInfo;
                    if(!defined('UID')) {
                        define('UID', $userInfo['id']);
                    }
                } else {
                    return_msg(101,'登录已过期,请重新登录');
                }
            } else {
                return_msg(101,'未登录,请您登录');
            }
        } else{
            if ($token) {
                $userInfo = db('users')->where(['token' => $token])->find();
                if ($userInfo) {
                    if($userInfo['status'] == '2'){
                        return_msg(1,'您的账号已被冻结,无法进行操作');
                    }
                    $this->userInfo = $userInfo;
                    if(!defined('UID')) {
                        define('UID', $userInfo['id']);
                    }
                } else {
                    return_msg(101,'登录已过期,请重新登录');
                }
            }
        }

        if(!defined('UID')) {
            define('UID', 0);
        }
    }


    /**
     * 检测当前控制器和方法是否匹配传递的数组
     *
     * @param array $arr 需要验证权限的数组
     * @return boolean
     */
    public function match($arr = [])
    {
        $request = Request::instance();
        $arr = is_array($arr) ? $arr : explode(',', $arr);
        if (!$arr) {
            return FALSE;
        }
        $arr = array_map('strtolower', $arr);
        // 是否存在
        if (in_array(strtolower($request->action()), $arr) || in_array('*', $arr)) {
            return TRUE;
        }
        // 没找到匹配
        return FALSE;
    }

}
